<?php if (!defined('BASEPATH'))exit('No direct script access allowed');

include_once 'ExceptionDAO.php';
include_once 'util/MapError.php';
include_once 'TOMulta.php';
include_once 'TOEmprestimo.php';

/**
 * DAO para operações de banco para multa
 * 
 * @author Douglas Rafael
 */
class DAOMulta extends CI_Model {
    
    /**
     * Lista todas as multas cadastradas
     * 
     * @param int    $init          Posição inicial do cursor
     * @param int    $quant         Total de registros
     * @param string $orderby       Nome da coluna a ser ordenada
     * @param string $direction     Direção: ASC ou DESC
     * @param bool   $limit         Ativa ou desativa o limit na consulta
     * @return array TOGrupo        Array de objetos
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function select_all_fines($init, $quant, $orderby = NULL, $direction = NULL, $limit = TRUE) {
        try {
            $this->db->select('multa.id, multa.valor, multa.descricao, multa.data_cobranca, multa.data_pagamento, multa.status, multa.usuario_id, multa.usuario_admin_id, usuario.nome AS usuario');
            $this->db->join('usuario', 'usuario.id = multa.usuario_id');
            ($orderby != NULL && $direction != NULL) ? $this->db->order_by($orderby, $direction) : $this->db->order_by('multa.data_cobranca', 'DESC');
            $this->db->order_by('multa.data_cobranca', 'DESC');
            $result = $limit ? $this->db->get('multa', $quant, $init) :  $this->db->get('multa');

            //Caso ocorra erro no select
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar listar as multas.');
            } else {
                $multas = array();
                $this->load->model('DAOUsuario');
                foreach ($result->result() as $value) {
                    $multa = new TOMulta();
                    $multa->id = $value->id;
                    $multa->valor = $value->valor;
                    $multa->descricao = $value->descricao;
                    $multa->data_cobranca = $value->data_cobranca;
                    $multa->data_pagamento = $value->data_pagamento;
                    $multa->status = $value->status;
                    
                    //Usuário que sofreu a multa
                    $multa->usuario = $this->DAOUsuario->get_user($value->usuario_id);
                    
                    array_push($multas, $multa);
                }
                return $multas;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }

    /**
     * Retorna o Total geral de multas cadastradas.
     * 
     * @return int Total de resgistros
     */
    public function amount_all_fines() {
        return $this->db->count_all_results('multa');
    }
    
     /**
     * Seleciona uma multa de acordo com seu id
     * 
     * @param  TOMulta $multa   Obejto multa contendo o id
     * @return TOMulta          Retorna Obejeto multa contendo os dados selecionados
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function get_fine(TOMulta $multa) {
        try {
            $this->db->where("id", $multa->id);
            $result = $this->db->get('multa');

            //Caso ocorra erro no select
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar selecionar multa.');
            } else {
                $value = $result->row();
                $multa = new TOMulta();
                $multa->id = $value->id;
                $multa->valor = $value->valor;
                $multa->descricao = $value->descricao;
                $multa->data_cobranca = $value->data_cobranca;
                $multa->data_pagamento = $value->data_pagamento;
                $multa->emprestimo = new TOEmprestimo();
                $multa->emprestimo->id = $value->emprestimo_id;
                $multa->status = $value->status;

                //Usuário que sofreu a multa e admin que cadastrou
                $this->load->model('DAOUsuario');
                $multa->usuario = $this->DAOUsuario->get_user($value->usuario_id);
                $multa->usuario_admin = $this->DAOUsuario->get_user($value->usuario_admin_id);

                return $multa;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    
    /**
     * Insere no banco de dados a multa
     * 
     * @param  TOMulta $multa   Obejeto grupo contendo dados para inserir
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function insert_fine(TOMulta $multa) {
        try {
            $this->db->set('valor', $multa->valor);
            $this->db->set('descricao', $multa->descricao);
            $this->db->set('data_cobranca', $multa->data_cobranca);
            $this->db->set('status', $multa->status);
            $this->db->set('data_pagamento', $multa->data_pagamento);
            $this->db->set('usuario_id', $multa->usuario->id);
            $this->db->set('emprestimo_id', $multa->emprestimo->id);
            $this->db->set('usuario_admin_id', $multa->usuario_admin->id);
            $result = $this->db->insert('multa', $multa);

            if (!$result) {
                //Traduz o tipo de erro de acordo com $num
                $erro = new MapError();
                throw new Exception($erro->getError($this->db->_error_number(), $this->db->_error_message(), 'Multa para o usuário: ' . $multa->usuario->nome));
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Atualiza dados da multa
     * 
     * @param  TOMulta $multa    Obejto multa contendo os dados para atualizar
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function update_fine(TOMulta $multa) {
        try {
            $this->db->set('valor', $multa->valor);
            $this->db->set('descricao', $multa->descricao);
            $multa->data_cobranca != NULL ? $this->db->set('data_cobranca', $multa->data_cobranca) : ''; // Verifica se existe data de cobrança para atualizar
            if($multa->status == TOMulta::MULTA_ATIVA)
                $this->db->set('data_pagamento', NULL);
            else
                $multa->data_pagamento != NULL ? $this->db->set('data_pagamento', $multa->data_pagamento) : ''; // Verifica se existe data de pagamento para atualizar
            $this->db->set('status', $multa->status);
            $this->db->set('emprestimo_id', $multa->emprestimo->id);
            $this->db->where('id', $multa->id);
            
            $result = $this->db->update('multa');
            
            if (!$result) {
                //Traduz o tipo de erro de acordo com $num
                $erro = new MapError();
                throw new Exception($erro->getError($this->db->_error_number(), $this->db->_error_message(), 'Multa para o usuário: ' . $multa->usuario->nome));
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    
    /**
     * Efeutua busca por multas
     * 
     * @param int    $init          Posição inicial do cursor
     * @param int    $quant         Total de registros
     * @param string $orderby       Nome da coluna a ser ordenada
     * @param string $direction     Direção: ASC ou DESC
     * @param bool   $limit         Ativa ou desativa o limit na consulta
     * @return array TOMulta        Array de objetos
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function search_fine($init, $quant, $term = NULL, $orderby = NULL, $direction = NULL) {
        try {
            $this->load->helper('string_util');
            // Se conter os caracteres / ou - o termo da busca é tratado como data
            if ((strstr($term, "/")) || (strstr($term, "-"))) {
                $term = format_date($term);
            }
            
            $this->db->select('multa.id, multa.valor, multa.descricao, multa.data_cobranca, multa.data_pagamento, multa.status, multa.usuario_id, multa.usuario_admin_id, usuario.nome AS usuario');
            $this->db->join('usuario', 'usuario.id = multa.usuario_id');
            $this->db->like('multa.id', $term);
            $this->db->or_like('multa.valor', $term);
            $this->db->or_like('multa.data_cobranca', $term);
            $this->db->or_like('multa.data_pagamento', $term);
            $this->db->or_like('usuario.nome', $term);
            $orderby != NULL && $direction != NULL ? $this->db->order_by($orderby, $direction) : $this->db->order_by('multa.data_cobranca', 'DESC');
            $result = $this->db->get('multa', $quant, $init);
            
            //Caso ocorra erro no select
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar efetuar busca por multas.');
            } else {
                $multas = array();
                $this->load->model('DAOUsuario');
                foreach ($result->result() as $value) {
                    $multa = new TOMulta();
                    $multa->id = $value->id;
                    $multa->valor = $value->valor;
                    $multa->descricao = $value->descricao;
                    $multa->data_cobranca = $value->data_cobranca;
                    $multa->data_pagamento = $value->data_pagamento;
                    $multa->status = $value->status;
                    
                    //Usuário que sofreu a multa
                    $multa->usuario = $this->DAOUsuario->get_user($value->usuario_id);
                    
                    array_push($multas, $multa);
                }
                return $multas;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Retorna a quantidade de registros da busca
     * 
     * @param string $term
     * @return int
     */
    public function amount_search_fine($term) {
        $this->load->helper('string_util');
        // Se conter os caracteres / ou - o termo da busca é tratado como data
        if ((strstr($term, "/")) || (strstr($term, "-"))) {
            $term = format_date($term);
        }
        $this->db->select('multa.id, multa.valor, multa.descricao, multa.data_cobranca, multa.data_pagamento, multa.status, multa.usuario_id, multa.usuario_admin_id, usuario.nome AS usuario');
        $this->db->join('usuario', 'usuario.id = multa.usuario_id');
        $this->db->like('multa.id', $term);
        $this->db->or_like('multa.valor', $term);
        $this->db->or_like('multa.data_cobranca', $term);
        $this->db->or_like('multa.data_pagamento', $term);
        $this->db->or_like('usuario.nome', $term);
        $result = $this->db->get('multa');

        return count($result->result());
    }
    
    
    /**
     * Exclui do banco a multa
     * 
     * @param  TOMulta $multa    Obejto multa contendo os ids para ser deletado
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function delete_fine(TOMulta $multa) {
        try {
            $this->db->where_in('id', $multa->id);
            $result = $this->db->delete('multa');

            if (!$result) {
                //Traduz o tipo de erro de acordo com $num
                $erro = new MapError();
                throw new Exception($erro->getError($this->db->_error_number(), $this->db->_error_message(), $multa->id));
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Retorna a soma de todas as multas de acordo com o status passado como paramento 
     * - As somas são agrupadas por mês e ano
     * 
     * @param  int $status  Status da multa. 1 Para ATIVA e 0 Para INATIVA
     * @return string       Retorna o valor da soma
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function sum_all_fine_group($status = TOMulta::MULTA_ATIVA) {
        try {
            $this->db->select('EXTRACT(MONTH FROM data_cobranca) AS mes, EXTRACT(YEAR FROM data_cobranca) AS ano, SUM(valor) AS valor');
            $this->db->where('status', $status);
            $this->db->group_by('mes');
            $this->db->group_by('ano');
            $this->db->order_by('ano', 'DESC');
            $this->db->order_by('mes', 'ASC');
            $result = $this->db->get('multa');
            
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar efetuar soma das multas');
            } else {
                return $result->result();
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Anos em que ocorreram multas
     * 
     * @return array        Resultado da cosulta, apenas os anos
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function fine_all_year() {
        try {
            $this->db->select("EXTRACT(YEAR FROM data_cobranca) AS ano");
            $this->db->group_by('ano');
            $this->db->order_by('ano DESC');
            $result = $this->db->get('multa');
            
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar efetuar soma das multas');
            }else{
                return $result->result();
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Retorna a soma das multas de acordo com o mês e o ano ou apenas do ANO,ou ainda tem todo o período 
     * caso o valor do mês e o ano passados como paramentro sejam NULL
     * 
     * @param  int $month       Més para aplicar filtro
     * @param  int $year        Ano para aplicar filtro
     * @param  int $status      Status da multa         
     * @return string           Valor da soma 
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function sum_fine_period($month = NULL, $year = NULL, $status = TOMulta::MULTA_ATIVA) {
        try {
            $this->db->select_sum('valor');
            $this->db->where('status', $status);
            if ($year != NULL && $month != NULL) { // Se a soma for para mes e ano
                $this->db->where("EXTRACT(MONTH FROM data_cobranca) IN($month) AND EXTRACT(YEAR FROM data_cobranca) IN($year)");
            } else if ($month == NULL && $year != NULL) { // Soma deverá se feita apenas pelo ano
                $this->db->where("EXTRACT(YEAR FROM data_cobranca) IN($year)");
            } else if ($month == NULL && $year == NULL) {
                
            } else {
                throw new Exception('Não é possível realizar a soma de multas. Parâmetros errados.');
            }
            $result = $this->db->get('multa')->row();

            return !isset($result->valor) ? NULL : $result->valor;
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }

    /**
     * Retorna o historico das multas do usuario
     * 
     * @param  int  $usuario_id     Código do usuário que deseja calcular o total das multas
     * @param  int  $status         Status da multa
     * @param  bool $all            Se deseja ignorar o status ou não. TRUE para sim e FALSE para não. FALSE é o valor default
     * @return string               Valor do resultado da soma
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function get_fine_user($usuario_id, $status = TOMulta::MULTA_ATIVA, $all = FALSE) {
        try {
            $this->db->select_sum('valor');
            $this->db->where('usuario_id', $usuario_id);
            //Verifica se deverá buscar todos os regirtros ATIVO e INATIVO ou deverá usar o status
            !$all ? $this->db->where('status', $status) : '';
            $result = $this->db->get('multa');

            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar efetuar soma das multas do usuário');
            }else{
                return $result->row()->valor;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Verifica os empréstimos aptos a sofrerem multas e retorna array contendo eles
     * 
     * @return array            Array de objetos contendo os dados
     * @throws ExceptionDAO
     * @throws Exception
     */   
    public function ckeck_set_fine() {
        try {
            $this->db->select('emprestimo.id, emprestimo.data_saida, emprestimo.data_retorno, emprestimo.usuario_id, emprestimo.usuario_admin_id');
            $this->db->join('emprestimo_has_item', 'emprestimo_has_item.emprestimo_id = emprestimo.id');
            $this->db->where('emprestimo.data_retorno < CURRENT_DATE()');
            $result = $this->db->get('emprestimo');

            $this->load->model('DAOEmprestimo');
            if (!$result) {
                throw new Exception('Ocorreu um erro na verificação de empréstimos aptos a sofrerem multas automaticas');
            } else {
                $loan_apt_fine = array(); // Array contendo emprestimos apos par aser multados
                foreach ($result->result() as $key => $value) {
                    $emprestimo = new TOEmprestimo();
                    $emprestimo->id = $value->id;
                    $emprestimo->data_saida = $value->data_saida;
                    $emprestimo->data_retorno = $value->data_retorno;
                    $emprestimo->usuario = new TOUsuario();
                    $this->load->model('DAOUsuario');
                    $emprestimo->usuario = $this->DAOUsuario->get_user($value->usuario_id);
                    $emprestimo->usuario_admin = new TOUsuario();
                    $emprestimo->usuario_admin->id = $value->usuario_admin_id;
                    $emprestimo->emprestimo_item = new TOEmprestimoItem();
                    $emprestimo->emprestimo_item = $this->DAOEmprestimo->get_loans($emprestimo->id);

                    $check_result = $this->DAOEmprestimo->check_status_loan($emprestimo, NULL, TRUE);

                    if ($check_result === TRUE) {
                        array_push($loan_apt_fine, $emprestimo);
                    }
                }

                return $loan_apt_fine;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }
    
    /**
     * Seta automaticamente as multas que forem cabiveis o empréstimo receber
     * 
     * @param  array  $emprestimos  Array de objeto 
     * @throws ExceptionDAO
     */
    public function set_auto_fine($emprestimos) {
        try {
            $set_fine = FALSE; // Utilizada para marcar se ouve ou não a gravação da multa
            /** Pengando configuações do sistema * */
            $this->load->model('DAOConfig');
            $config = $this->DAOConfig->get_config();
            // Pegando a data atual
            $data_atual = date('Y-m-d');

            foreach ($emprestimos as $key=> $emprestimo) {
                //Total de dias de atraso do emprestimo
                $dias_atraso = diff_date($data_atual, $emprestimo->data_retorno, 'd');
                $tempo_atraso = diff_date($data_atual, $emprestimo->data_retorno);
                // Total de vezes que será multiplicado pelo valor
                $vezes_multa = floor($dias_atraso / $config->periodo_multa);

                // Pegando os itens do empréstimo
                $itens = array();
                foreach ($emprestimo->emprestimo_item as $emprestimo_item) {
                    array_push($itens, $emprestimo_item->item->titulo . ' | Total: ' . $emprestimo_item->total);
                }
                // Descrição da multa
                $descricao = "Empréstimo de código: {$emprestimo->id} não foi FINALIZADO, itens não foram entregues...
Faz $tempo_atraso que o empréstimo está com data VENCIDA!
Itens solicitados no empréstimo: \"" . implode(', ', $itens) . '".';

                $multa = new TOMulta();
                $multa->valor = number_format(($config->valor_multa * $vezes_multa), 2);
                $multa->descricao = $descricao;
                $multa->data_cobranca = date('Y-m-d H:i:s');
                $multa->status = TOMulta::MULTA_ATIVA;
                $multa->data_pagamento = NULL;
                $multa->usuario = new TOUsuario();
                $multa->usuario->id = $emprestimo->usuario->id;
                $multa->usuario_admin = new TOUsuario();
                $multa->usuario_admin->id = $emprestimo->usuario_admin->id;
                $multa->emprestimo = new TOEmprestimo();
                $multa->emprestimo->id = $emprestimo->id;

                /**
                 * Verificando se já existe multa cadastrada
                 * - Se já existir a multa é atualizada, se não é inserida
                 */
                $check_multa = $this->get_fine_loan($emprestimo->id);  //Verifica se existe multa cadastrada
                if ($check_multa != NULL) {
                    $multa->id = $check_multa->id;
                    // Verifica se é preciso atualizar multa. Se o valor for igual não é preciso
                    if ((number_format($multa->valor) != number_format($check_multa->valor)) && ($multa->valor != 0)) {
                        $this->update_fine($multa);
                        $set_fine = TRUE;
                    } else {
                        $set_fine = FALSE;
                    }
                } else {
                    if ($multa->valor != 0) {
                        $this->insert_fine($multa);
                        $set_fine = TRUE;
                    } else {
                        $set_fine = FALSE;
                    }
                }

                // Se for preciso enviar e-mail de alerta para o usuário
                if ($config->modulo_email_status && $config->alerta_multa && $set_fine) {
                    $this->load->model('DAOEmail');
                    $email = new TOEmail();
                    $email->destinatario = array($emprestimo->usuario->email);
                    $email->assunto = 'Notificação de multa!';
                    
                    $logomarca = Main::get_logomarca();
                    $email->mensagem = "<h1><big>NOTIFICA&Ccedil;&Atilde;O DE MULTA &nbsp;</big></h1>
                                        <div style='background:#eee; border:1px solid #ccc; padding:5px 10px'>
                                            <p>Caro usu&aacute;rio (a): <strong><span style='font-size:16px'> {$emprestimo->usuario->get_nome_completo()}</span></strong><br />
                                            O empr&eacute;stimo de c&oacute;digo:<strong><span style='font-size:14px'> {$emprestimo->id}</span></strong> que voc&ecirc; realizou no dia: <strong><span style='font-size:14px'>" . format_date($emprestimo->data_saida) . "</span></strong> horas e de t&eacute;rmino na data: <strong><span style='font-size:14px'>" . format_date($emprestimo->data_retorno, FALSE) . ",</span></strong> n&atilde;o foi finalizado e est&aacute; com data VENCIDA, somando o total de: <strong><span style='font-size:14px'>" . string_fill($dias_atraso, 2, 0) . "</span></strong> dias em atraso!</p>
                                            <p>De acordo com as normas da biblioteca voc&ecirc; est&aacute; recebendo esta notifica&ccedil;&atilde;o porque foi registrado ou atualizado uma multa no valor de: <strong><span style='font-size:16px'>R$ {$multa->valor}</span></strong>, referente ao atraso.</p>
                                            <p>Compare&ccedil;a com urg&ecirc;ncia a biblioteca para finaliza&ccedil;&atilde;o do empr&eacute;stimo. Leve os itens que foram retirados no empr&eacute;stimo e o valor referente a multa para sua quita&ccedil;&atilde;o!<br />
                                            Obs. A multa poder&aacute; sofrer altera&ccedil;&otilde;es caso o empr&eacute;stimo n&atilde;o seja finalizado e a multa paga no prazo de <strong><span style='font-size:16px'>" . string_fill($config->periodo_multa, 2, 0) . "</span></strong> dias.</p>
                                        </div>
                                        <p><br />
                                        <strong><span style='font-size:16px'>&#8618; <u>INFORMA&Ccedil;&Otilde;ES DO EMPR&Eacute;STIMO</u></span></strong></p>
                                        <p style='margin-left:40px'><strong>C&oacute;digo:</strong> {$emprestimo->id}<br />
                                            <strong>Data Sa&iacute;da:</strong> " . format_date($emprestimo->data_saida) . "<br />
                                            <strong>Data Retorno:</strong> " . format_date($emprestimo->data_retorno, FALSE) . "<br />
                                            <strong>Tempo em atraso:</strong> {$tempo_atraso}<br />
                                            <strong>Itens do empr&eacute;stimo:</strong><span style='font-size:14px'> \"" . implode(', ', $itens) . "\"</span>
                                        </p>
                                        <p>Obrigado,</p>
                                        <p><em><span style='font-size:11px'>{$config->nome_instituicao}</span></em><br />
                                            <img alt='' src='{$logomarca}' style='float:right; width:220px' /><em><span style='font-size:11px'>{$config->endereco}<br />
                                            Contato: {$config->telefone} | {$config->email}</span></em>
                                        </p>
                                        <p style='text-align: right;'><span style='font-size:10px'>Conte&uacute;do gerado automaticamente, por favor n&atilde;o responder.<br />" . format_date(date('Y-m-d h:i:s')) . "</span></p>";
                    
                    //Envia e-mail par ausuário da vez
                    $this->DAOEmail->send_email($email);
                }
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage() . '<br /><strong><a href="' . base_url() . '">Clique aqui para continuar...</a></strong>');
        }
    }
    
    
    /**
     * Seleciona multa pelo código do empréstimo... Se nao existir o valor NULL é retornado
     * 
     * @param  int  $id_emprestimo  id do empréstimo
     * @return null
     * @throws ExceptionDAO
     * @throws Exception
     */
    public function get_fine_loan($id_emprestimo) {
        try {
            $this->db->where("emprestimo_id", $id_emprestimo);
            $result = $this->db->get('multa', 1);
            
            //Caso ocorra erro no select
            if (!$result) {
                throw new Exception('Ocorreu um erro de banco de dados ao tentar selecionar multa.');
            } else {
                $value = $result->row();
                if (count($value) > 0) {
                    $multa = new TOMulta();
                    $multa->id = $value->id;
                    $multa->valor = $value->valor;
                    $multa->descricao = $value->descricao;
                    $multa->data_cobranca = $value->data_cobranca;
                    $multa->data_pagamento = $value->data_pagamento;
                    $multa->status = $value->status;
                    $multa->emprestimo = new TOEmprestimo();
                    $multa->emprestimo->id = $value->emprestimo_id;

                    //Usuário que sofreu a multa e admin que cadastrou
                    $this->load->model('DAOUsuario');
                    $multa->usuario = $this->DAOUsuario->get_user($value->usuario_id);
                    $multa->usuario_admin = $this->DAOUsuario->get_user($value->usuario_admin_id);
                } else {
                    $multa = NULL;
                }
                return $multa;
            }
        } catch (Exception $e) {
            throw new ExceptionDAO($e->getMessage());
        }
    }

}